﻿#define _CRT_SECURE_NO_WARNINGS

/*C++第一个程序
#include<iostream>
using namespace std;
int main()
{
	cout << "hello word " << endl;
	return 0;
}
*/


/*  namespace的基本定义
#include<iostream>
#include<stdio.h>
#include<stdlib.h>
using namespace std;
namespace wzh
{
	int a = 100;
	int add(int x, int y)
	{

		return x + y;
	}

}

int main()
{
	printf("%d ", wzh::a);
	printf("%d\n", wzh::add(1, 2));
	cout << wzh::a;
	return 0;
}
*/



/*****************命名空间的使用************/


/*
*         指定命名空间
#include<iostream>

namespace wzh
{
	int a = 0;
	int b = 1;

}

int main()
{
	printf("%d ", wzh::a);
	return 0;
}
*/

/*
* 展开命名空间常用的某个变量
#include<iostream>

namespace wzh
{

	int a = 0;
	int b = 1;
}
//命名空间中有某个变量经常要用到是 可以展开方便调用
using wzh::b;
int main()
{
	printf("%d ", b);
	return 0;
}
*/


/*
* 展开命名空间中全部变量
* #include<iostream>

namespace wzh
{

	int a = 0;
	int b = 1;
}
//展开命名空间中全部变量
using namespace wzh;
int main()
{
	printf("%d ", b);
	return 0;
}
*/

/*******************C++输入&输出*****************/

/*
#include<iostream>

using namespace std;
//using std::cout;
//using std::endl;
int main()
{
	int a = 1;
	float b = 1.1;
	char c = 'a';
	cout << a << endl;
	cout << b <<"   ";
	cout << c;
	cin >> a;
	cin >> b;
	cout << a << endl;
	cout << b << "   ";
	return 0;
}
*/


/****************缺省参数*************************/

//（1）全缺省就是全部形参都给值
//（2）半缺省就是部分形参给值  规定缺省值必须从右往左，并且不能间隔或者跳跃给值
//（3）函数的声明和定义不在同一个文件时，缺省值不能再定义跟声明同时出现 规定必须是函数声明给缺省值
//（3）-->在函数声明给缺省值


/*
#include<iostream>
using namespace std;

//全缺省
void fun1(int a = 0, int b = 10, int c = 20)
{

	cout << a << endl;
	cout << b << endl;
	cout << c << endl;
}
//半缺省
void fun2(int a, int b, int c = 100)
{
	cout << "a:" << a << endl;
	cout << b << endl;
	cout << c << endl;
}

int main()
{

	fun2(1,2);
	return 0;
}
*/

/************函数重载*************************/

//(1)参数个数不同
//(2)参数类型不同
//(3)参数类型顺序不同

/*
#include<iostream>
using namespace std;

int add(int x, int y)
{
	return x + y;
}

double add(double x, double y)
{

	return x + y;
}

int main()
{
	int a = add(1, 2);
	cout << a;
	return 0;
}
*/


/***************引用******************/
//引⽤不是新定义⼀个变量，⽽是给已存在变量取了⼀个别名，编译器不会为引⽤变量开辟内存空间，它和它引⽤的变量共⽤同⼀块内存空间
//例如  林冲 就是豹子头
//  类型& 引用别名 = 引用对象；

//引用的参数必须初始化


#include<iostream>
using namespace std;

int main()
{
	int a = 100;
	int& b = a;
	int& c = a;

	/*
		引⽤⼀旦引⽤⼀个实体，再不能引⽤其他实体
	int& b = c;
	*/

	//地址都是相同的
	cout << &a << endl;
	cout << &b << endl;
	cout << &c << endl;


	return 0;
}
